MouseTracker は注釈を添付しなくなりました
まとめ
削除されましたMouseTracker
のメソッドattachAnnotation
、detachAnnotation
、 とisAnnotationAttached
。
コンテクスト
マウス イベント (マウス ポインターが領域に入ったときなど)
終了したこと、または領域上でホバリングしていることは、次の助けを借りて検出されます。MouseTrackerAnnotation
関心のある領域に配置される
レンダリングフェーズ中。更新(新しいフレームまたは新しいイベント)のたびに、MouseTracker
マウスがホバーした注釈を比較します
更新前後のポインター、その後のディスパッチ
それに応じてコールバックが行われます。
のMouseTracker
マウスポインタの状態を管理するクラス、
以前は必要だったMouseRegion
マウント時に注釈を付けるには、
アンマウント時に注釈を切り離します。
これを使用したのは、MouseTracker
を実行するマウント出口チェック(例えば、MouseRegion.onExit
アンマウントによって終了した場合は呼び出さないでください。
ウィジェットの)、呼び出しを防ぐためsetState
アンマウントされたウィジェットと例外のスロー (説明済み)
詳しくは問題 #44631)。
このメカニズムは次のように置き換えられました。MouseRegion
マウントされた終了を実行できるステートフル ウィジェット
アンマウント時にコールバックをブロックすることで、それ自体をチェックします。
したがって、これらのメソッドは削除され、MouseTracker
画面上のすべての注釈を追跡しなくなりました。
変更内容の説明
のMouseTracker
クラスは関連する 3 つのメソッドを削除しました
注釈を添付するには:
class MouseTracker extends ChangeNotifier {
// ...
- void attachAnnotation(MouseTrackerAnnotation annotation) {/* ... */}
- void detachAnnotation(MouseTrackerAnnotation annotation) {/* ... */}
- @visibleForTesting
- bool isAnnotationAttached(MouseTrackerAnnotation annotation) {/* ... */}
}
RenderMouseRegion
とMouseTrackerAnnotation
もう実行しない
マウント出口チェック、その間MouseRegion
まだそうです。
移行ガイド
に電話をかけるMouseTracker.attachAnnotation
とdetachAnnotation
ほとんど影響を与えずに削除する必要があります。
- の用途
MouseRegion
まったく影響を受けないはずです。 - コードで直接使用している場合
RenderMouseRegion
またMouseTrackerAnnotation
、 を注意onExit
を使用したイベントによって終了が発生したときに呼び出されるようになりました。 電話するMouseTracker.detachAnnotation
。 国家が関与しない場合にはこれは問題にはなりませんが、 それ以外の場合は、マウント出口チェックを追加することをお勧めします。 特にコールバックがリークされた場合、外部の ウィジェットが呼び出す可能性があります72be5d56-5a22-4181-ベッド5-66612be9f6fd初期化。例えば:
移行前のコード:
class MyMouseRegion extends SingleChildRenderObjectWidget {
const MyMouseRegion({this.onHoverChange});
final ValueChanged<bool> onHoverChange;
@override
RenderMouseRegion createRenderObject(BuildContext context) {
return RenderMouseRegion(
onEnter: (_) { onHoverChange(true); },
onExit: (_) { onHoverChange(false); },
);
}
@override
void updateRenderObject(BuildContext context, RenderMouseRegion renderObject) {
renderObject
..onEnter = (_) { onHoverChange(true); }
..onExit = (_) { onHoverChange(false); };
}
}
移行後のコード:
class MyMouseRegion extends SingleChildRenderObjectWidget {
const MyMouseRegion({this.onHoverChange});
final ValueChanged<bool> onHoverChange;
@override
RenderMouseRegion createRenderObject(BuildContext context) {
return RenderMouseRegion(
onEnter: (_) { onHoverChange(true); },
onExit: (_) { onHoverChange(false); },
);
}
@override
void updateRenderObject(BuildContext context, RenderMouseRegion renderObject) {
renderObject
..onEnter = (_) { onHoverChange(true); }
..onExit = (_) { onHoverChange(false); };
}
@override
void didUnmountRenderObject(RenderMouseRegion renderObject) {
renderObject
..onExit = onHoverChange == null ? null : (_) {};
}
}
に電話をかけるMouseTracker.isAnnotationAttached
削除する必要があります。
この機能は技術的に不可能になりましたが、
注釈は追跡されなくなったため。
何らかの理由でこの機能が必要な場合は、問題を送信してください。
タイムライン
リリースされたバージョン: 1.15.4
安定版リリース: 1.17
参考文献
API ドキュメント:
MouseRegion
MouseTracker
MouseTrackerAnnotation
RenderMouseRegion
関連する PR:
- MouseTracker では注釈を添付する必要がなくなりました、 変化をもたらしたのは
- MouseTracker ライフサイクルの改善: チェックをポストフレームに移動、 最初にマウント出口の変更を導入しました。 で説明しましたonExit への変更。